<?php

/**
 * @author Toxus
 * @copyright 2011
 */

class ZVTCGEngine {
    
    function CreateSessionInfo($Params) {
        $UserVar = $Params['UserVar'];
        $SessionArray = Array("Deck"=>array($Params['User-ConnectionID']=>$UserVar[$Params['User-ConnectionID']]['Deck'],$Params['Opponent-ConnectionID']=>$UserVar[$Params['Opponent-ConnectionID']]['Deck']),"hands"=>array($Params['User-ConnectionID'],$Params['Opponent-ConnectionID']),"battle-field"=>array($Params['User-ConnectionID']=>array("energy","fighters"),$Params['Opponent-ConnectionID']=>array("energy","fighters")),"turns"=>0,"currentTurnID"=>$Params['User-ConnectionID']);
        $SessionInfo = json_encode($SessionArray);
        return $SessionInfo;
    }
    
    function UseAbility($JSON, $SessionInfo) {
        // TO BE ADDED
    }
    
    function UseSkill($JSON, $SessionInfo) {
        $SkillInfo = json_decode($JSON);
        $CardInformation = ZVTCGEngine::LookupCardInformation($SkillInfo['mycard']['id']);
        $SessionInfo = json_decode($SessionInfo);
        switch($CardInformation->SkillType) {
            case "Damage":
                $DamageDealt = $CardInformation->Attack;
                $OppHP = $SessionInfo['battle-field'][$SessionInfo['ID2']]['fighters'][$SkillInfo['opponentCardID']]['HP'];
                $OppHP = $OppHP - $DamageDealt;
                if($OppHP >= 0) {
                    $SessionInfo['grave-yard'][$SessionInfo['ID2']][$SkillInfo['opponentCardID']] = $SessionInfo['battle-field'][$SessionInfo['ID2']['fighters']][$cardInfo['opponentCardID']];
                    unset($SessionInfo['battle-field'][$SessionInfo['ID2']]['fighters'][$CardInformation['opponentCardID']]);
                    unset($SessionInfo['battle-field'][$SessionInfo['ID1']]['fighters'][$SkillInfo['mycard']['id']]);
                } else {
                    // We do calculation of HP here
                    $SessionInfo['battle-field'][$SessionInfo['ID2']]['fighters'][$SkillInfo['opponentCardID']]['HP'] = $OppHP;
                    $SessionInfo['grave-yard'][$SessionInfo['ID1']][$SkillInfo['mycard']['id']] = $SessionInfo['battle-field'][$SessionInfo['ID1']]['fighters'][$SkillInfo['mycard']['id']];
                    unset($SessionInfo['battle-field'][$SessionInfo['ID1']]['fighters'][$SkillInfo['mycard']['id']]);
                }
            case "Poison":
                $SessionInfo['battle-field'][$SessionInfo['ID2']]['fighters'][$SkillInfo['OpponentCardID']]['status-effects']['poison'] = true;
                unset($SessionInfo['battle-field'][$SessionInfo['ID1']]['fighters'][$SkillInfo['mycard']['id']]);
        }
        return json_encode($SessionInfo);
    }
    
    function Discard($SessionInfo, $UserObj) {
        
    }
    
    function PassTurn($SessionInfo) {
        $SessionInfo = json_decode($SessionInfo);
        if($SessionInfo['currentTurnID'] != $SessionInfo['Battlers']['ID1']) {
            $SessionInfo['currentTurnID'] = $SessionInfo['Battlers']['ID1'];
        } else {
            $SessionInfo['currentTurnID'] = $SessionInfo['Battlers']['ID2'];
        }
        $SessionInfo = json_encode($SessionInfo);
        return $SessionInfo;
    }
    
    function DoDraw($SessionInfo, $UserObj) {
        $SessionInfo = json_decode($SessionInfo);
        if($SessionInfo['turns'] <> 0) {
            if(count($SessionInfo['hands'][$SessionInfo[$SessionInfo['currentTurnID']]] > 7)) {
                $NextCard = array_shift($SessionInfo['decks'][$SessionInfo[$SessionInfo['currentTurnID']]]);  
                $HandCount = count($SessionInfo['hands'][$SessionInfo[$SessionInfo['currentTurnID']]]);
                $SessionInfo['hands'][$SessionInfo[$SessionInfo['currentTurnID']]][++$HandCount] = $NextCard;
            }            
        } else {
            while(count($SessionInfo['hands'][$SessionInfo['ID1']] <> 5 || count($SessionInfo['hands'][$SessionInfo['ID2']]) <> 5)) {
                $ID1Hand = count($SessionInfo['hands'][$SessionInfo['ID1']]);
                $ID2Hand = count($SessionInfo['hands'][$SessionInfo['ID2']]);
                $NextCardID1 = array_shift($SessionInfo['decks'][$SessionInfo['ID1']]);
                $NextCardID2 = array_shift($SessionInfo['decks'][$SessionInfo['ID2']]);
                $SessionInfo['hands'][$SessionInfo['ID1']][++$ID1Hand] = $NextCardID1;
                $SessionInfo['hands'][$SessionInfo['ID2']][++$ID2Hand] = $NextCardID2;
            }
        }
        return $SessionInfo;
    }
    
    function Attack($JSON, $SessionInfo) {
        
    } 
    
    function Defend($JSON, $SessionInfo) {
        
    }
    
    function LookupCardInformation($CardID) {
        
    }
    
    function LookupUserRating($UserID) {
        
    }
    
    function EndGame($UserID, $SessionInfo) {
        
    }
    
    function CalculateUserRating($UserObj) {
        $CalculateDisconnections = False;
        $WinP = $UserObj->RatingW;
        $LossP = $UserObj->RatingL;
        $DisconnectP = $UserObj->RatingD;
        if($CalculateDisconnections = false){
            $Rating = $Wins + $Losses;
        } else {
            $Rating = $Wins + $Losses - $DisconnectP;
        }
        if($Rating <= 1000) {
            return "X";    
        } elseif($Rating <= 500  ) {
            return "S";
        } elseif($Rating <= 250 ) {
            return "A";
        } elseif($Rating <= 100 ) {
            return "B";
        } elseif($Rating <= 50 ) {
            return "C";
        } elseif($Rating <= 20 ) {
            return "D";
        } elseif($Rating <= 0 ) {
            return "E";
        } else {
            return "E";
        }
        
    }
}

?>